package wotian

import (
	"encoding/base64"
	"encoding/binary"
	"fmt"
	"strings"
)

//采样：60   /10s
//发送：360  /10s
//高报：1000 /kPa
//低报：0   /kPa

// Encode 编码
//
// 参数为妙, 实际执行为 参数*10秒, 因此在输入的时候将 参数/10
// 如果参数小于6(实际60),  则使用默认值6, 控制最小1分钟
func Encode(seconds uint16) (packet string, fPort int) {
	seconds = seconds / 10 // 如果用js, 需要取模, 再减去模数, 保证数据为整数
	if seconds < 6 {
		seconds = 6
	}
	var frame []byte
	frame = append(frame, 0x07)       // 固定值
	frame = append(frame, 0x04, 0x74) // 固定值
	secondBs := int16Bytes(seconds)
	frame = append(frame, secondBs...)

	fPort = 85 // 固定值
	tmp := strings.ToUpper(fmt.Sprintf("%x", frame))
	packet = base64.StdEncoding.EncodeToString([]byte(tmp))
	return
}

func int16Bytes(n uint16) (bs []byte) {
	bs = append(bs, 0x00, 0x00)
	binary.BigEndian.PutUint16(bs, n)
	return
}
